package com.msblearn.C_002;

import java.util.concurrent.TimeUnit;

/**
 * 一个同步方法可以调用另一个同步方法，一个线程已经拥有某个对象的锁，再次申请仍然会得到锁
 * 这样可以说Sychronized是一个可重入锁。
 *
 *
 */
public class C07_Sychronized {
    synchronized void m1(){

            System.out.println("m1 start");
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //如果这里不能调用m2()方法，则会进入死锁。这样是不允许的
            //所以说sychronized是可重入锁。
            m2();
            System.out.println("m1 end");
    }

    synchronized  void m2(){
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("m2");
    }

    public static void main(String[] args) {
        new C07_Sychronized().m1();
    }
}
